package com.xh.code.code_ge_util;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.nio.file.Paths;

public class CodeGenerator {

    // 数据库连接信息
    private static final String MYSQL_URL = "jdbc:mysql://localhost:3306/xh_db?serverTimezone=GMT%2B8";
    private static final String MYSQL_USERNAME = "root";
    private static final String MYSQL_PASSWORD = "1234";
    // 生成代码的作者
    private static final String AUTHOR_NAME = "XiuHeng";
    // 用于存放代码的父包所在路径，父包位于该路径下
    private static final String PARENT_PACKAGE_LOCATION = "com.xh.code";
    // 父包名
    private static final String PARENT_PACKAGE_NAME = "generator";
    // 父包模块名，该模块位于父包下
    private static final String PARENT_PACKAGE_MODULE_NAME = "test_m1";
    // 用于生成代码的表名
    private static final String TABLE_NAME = "t_code_generator";

    // 使用 FastAutoGenerator 快速配置代码生成器
    public static void main(String[] args) {

        FastAutoGenerator.create(MYSQL_URL, MYSQL_USERNAME, MYSQL_PASSWORD)
                // 全局配置
                .globalConfig(builder -> {
                    // 设置作者
                    builder.author(AUTHOR_NAME)
                            //开启 swagger 模式， 这里如果开启则需要引入 Swagger pom依赖
                            .enableSwagger()
                            // 设置注释日期格式
                            .commentDate("yyyy-MM-dd HH:mm:ss")
                            // 禁用自动打开文件夹， 默认生成代码后会自动打开文件夹，这里直接禁用不打开
                            .disableOpenDir()
                            // 输出目录， 默认为当前项目路径下的 src/main/java
                            .outputDir(Paths.get(System.getProperty("user.dir"),"src","main","java").toString());
                })
                // 包配置
                .packageConfig(builder -> {
                    // 设置父包名
                    builder.parent(PARENT_PACKAGE_LOCATION+"."+PARENT_PACKAGE_NAME)
                            // 设置父包模块名
                            .moduleName(PARENT_PACKAGE_MODULE_NAME)
                            // 设置实体类包名
                            .entity("model")
                            // 设置 Mapper 接口包名
                            .mapper("dao")
                            // 设置 Service 接口包名
                            .service("service")
                            // 设置 Service 实现类包名
                            .serviceImpl("service.impl")
                            // 设置 Mapper XML 文件包名
                            .xml("mappers");
                })
                // 策略配置
                .strategyConfig(builder -> {
                    // 设置需要生成的表名, 多个表名之间用英文逗号隔开
                    //builder.addInclude("table1", "table2")
                    // 设置需要生成的表名
                    builder.addInclude(TABLE_NAME)
                            // 设置过滤表前缀，用法同上一行的表名
                            //.addTablePrefix("t_")
                            .entityBuilder()
                            // 启用 Lombok
                            .enableLombok()
                            // 启用字段注解
                            .enableTableFieldAnnotation()
                            .controllerBuilder()
                            // 启用 REST 风格
                            .enableRestStyle();
                })
                // 模板配置 使用 Freemarker 模板引擎
                .templateEngine(new FreemarkerTemplateEngine())
                // 执行生成
                .execute();
    }

}
